#ifndef SYMBOLE_HPP
#define SYMBOLE_HPP

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

/**
 * Classe abstraite de gestion d'un type.
 */
class Symbole {
	private:
		string category;

	public:
		Symbole(string category);

		/**
		 * Destructeur virtuel : classe abstraite.
		 */
		virtual ~Symbole() = 0;

		/**
		 * Retourne nom de la catégorie de symbole (variable, temporaire)
		 *
		 * @return Nom de la catégorie.
		 */
		const string getCategory() const;

		/**
		 * Retourne chaîne de caractères représentant les attributs du symbole.
		 *
		 * @return Chaîne représentant les attributs du symbole.
		 */
		//virtual string getAttributes() const = 0;

		friend ostream& operator<<(ostream& os, const Symbole& symb);

		void print(ostream& os) const;

		virtual string toString() const;

};

#endif
